package com.jic.member.service;

import com.jic.member.constant.enums.TripTimingJobTypeEnum;

import java.util.Date;
import java.util.List;

/**
 * 公共的定时任务接口，
 * 此方法提供破一个register方法，先注册一个job，并自己指定一个时间点，
 * 然后外部会有定时任务不断调用process()方法，从而达到触发需要调用的方法的目的
 * 注意：需要在想trip_node_template的execute_method字段做好相应配置
 * 配置方式为：服务名_方法名_入参1的Class全类名_入参2的Class全类名...
 * 例如：tripService_start_com.jic.member.entity.TripEntity_java.lang.String_java.lang.String
 * @author yinhaijun
 * @date: 2020/6/5
 */
public interface TripTimingJobService {
    /**
     * 公共定时任务注册接口
     * @param type 1、旅程启动
     * @param nodeTemplateCode
     * @param branchNodeId
     * @param executeTime 执行job的时间点，传null表示立即执行（异步）
     * @param jobDesc job描述
     * @param args job的参数值，注意：参数是有顺序的，顺序为从左到右，并且对应trip_node_template的execute_method字段
     */
    void register(TripTimingJobTypeEnum type, String nodeTemplateCode, Long branchNodeId, Date executeTime, String jobDesc, Object... args);

    void exeNext(Long nowNodeId, List<String> userIds);

    /**
     * 每一定时间段被调用一次
     */
    void process();

    void close(Long tripId);


}
